[Redshift] テーブル作成には複数の手段が存在する
はじめに
テーブル作成には状況に応じて複数の手段が用意されています。必要に応じて使い分けるととても便利なので、小ネタですが備忘録として書きます。
環境
MacOSX 10.10.5 Yosemite Redshift 1.0.1125
派閥別一覧
正統派:CREATE TABLE
基本ですね。 RedshiftではENCODE(圧縮)、DISTSTYLE(分散キー)、SORTKEY(ソートキー)の指定が他のDBと違う所です。 Amazon Redshift | CREATE TABLE
CREATE TABLE blog.test ( id INTEGER ENCODE lzo , title VARCHAR(8) ENCODE lzo , PRIMARY KEY(id) ) DISTSTYLE ALL SORTKEY(id);
一時的派:TEMP TABLE
一時テーブルなので、トランザクションが終了すると削除されてしまいます。 ぱっと見はCREATE TABLEと似てますが、圧縮ができないので使い所を考えないとOut Of Memory必要があります。
CREATE TEMP TABLE test3 ( id INTEGER , title VARCHAR(8) );
あまり細かい事は言わないよ派:CREATE TABLE AS (CTAS)
CREATE TABLE程ではないけど部分的に設定できます。 Amazon Redshift | CREATE TABLE AS 注意事項として、作成元のテーブルから圧縮のエンコーディング、制約、ID 列、デフォルトの列値、プライマリキーを継承しない、などがあります。 Amazon Redshift | CTAS の使用に関する注意事項
CREATE [TEMP] TABLE blog.test2 DISTSTYLE EVEN SORTKEY(fruit_id) AS SELECT * FROM blog.fruit;
緊急派:SELECT INTO
SELECT分からいきなりテーブルにできてしまいますので、今すぐにとりあえずCREATEしたい派に役立ちます。 上記のCTASとの違いも確認しておきましょう。 Amazon Redshift | SELECT INTO
SELECT * INTO [TEMP] TABLE blog.test4 FROM blog.fruit;
節約派:VIEW
テーブルの様に扱えると言う事で...長所は容量を食わない所ですが、短所は場合により処理に時間がかかる事です。 Amazon Redshift | CREATE VIEW
CREATE VIEW blog.test_view AS SELECT name, price FROM blog.fruit;
さいごに
状況によって使い分けられると言ってもたまにしか使わないのもあり、備忘録として(個人的に)役立つかな、と思います。 他にも見つけたら追記して行きたいと思います。